/*
 * Copyright (c) 2018, dreamkaylee@foxmail.com All Rights Reserved.
 */

package com.common.util;

import java.math.BigDecimal;

/**
 * 数学计算
 * @author limk
 * @date 2018年3月26日 下午12:26:23
 * @version
 */
public class Maths {
	
	/**
	 * 加法
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double add(double d1, double d2, int size) {
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return b1.add(b2).setScale(size, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	/**
	 * 减法
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double subtract(double d1, double d2, int size) {
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return b1.subtract(b2).setScale(size, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	/**
	 * 乘法
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double multiply(double d1, double d2, int size) {
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return b1.multiply(b2).setScale(size, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	/**
	 * 除法
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static double divide(double d1, double d2, int size) {
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return b1.divide(b2, size, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	/**
	 * 乘法
	 * @param b1
	 * @param b2
	 * @return
	 */
	public static BigDecimal multiply(BigDecimal b1, BigDecimal b2, int size) {
		return b1.multiply(b2).setScale(size, BigDecimal.ROUND_HALF_UP);
	}
	
	/**
	 * BigDecimal转double并保留n位小数
	 * @param b
	 * @return
	 */
	public static double toDouble(BigDecimal b, int size) {
		return b.setScale(size, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	/**
	 * double转BigDecimal并保留n位小数
	 * @param b
	 * @return
	 */
	public static BigDecimal toBigDecimal(double d, int size) {
		return new BigDecimal(d).setScale(size, BigDecimal.ROUND_HALF_UP);
	}
	
	/**
	 * double并保留n位小数
	 * @param b
	 * @return
	 */
	public static double toDouble2(double d, int size) {
		return new BigDecimal(d).setScale(size, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
}
